package com.indexingsystem.boss.admin.mapper;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.indexingsystem.boss.Vo.OrderUserVo;
import com.indexingsystem.boss.Vo.PUserPwVo;
import com.indexingsystem.boss.Vo.ParentUserVo;
import com.indexingsystem.boss.Vo.PuserInfoVo;
import com.indexingsystem.boss.Vo.PusersDetailsVo;
import com.indexingsystem.boss.Vo.PusersOfterDetailVo;
import com.indexingsystem.boss.Vo.PusersSelectVo;
import com.indexingsystem.boss.Vo.StatusList;
import com.indexingsystem.boss.Vo.UserIndexVo;
import com.indexingsystem.boss.Vo.UserQueryVo;
import com.indexingsystem.boss.Vo.UserRoleVo;
import com.indexingsystem.boss.entity.Pusers;

public interface PusersMapper {
	
    /**
     * 根据用户名模糊查询用户信息
     * @param userName
     * @return
     */
    List<PusersOfterDetailVo> getUserInfoByAllUserName(UserIndexVo userIndexVo);
    
    /**
     * 根据用户名,机构id查询用户信息
     * @param userName
     * @param institutionsId
     * @return
     */
    PusersOfterDetailVo getUserByUserNameInstitution(UserIndexVo userIndexVo);
	/**
	 * 通过用户名称查询用户信息.
	 * 
	 * @param userName
	 * @return
	 */
	PusersDetailsVo getUserInfoByUserName(String userName);
	
    /**
    * 通过机构id获取机构用户列表.
    * @param institutionId
    * @return
    */
   List<Pusers> getInstitutionsPUserListById(String institutionId);	
	

	int deleteByPrimaryKey(String userId);

	int insert(Pusers record);

	int insertUserSelective(Pusers record);

	List<Pusers> selectPusersList(String institutionId);

	List<Pusers> selectNotBindUser();
	
	
	/**
	 * 通过条件查询获取用户符号条件的总数量.
	 * @param record
	 * @return
	 */
	Integer getPuserQueryList(PusersSelectVo record);
	
	/**
	 * 通过用户id校验所属机构是否禁用.
	 * 
	 * @param userId
	 * @return
	 */	
	String getUseridByInstitutionsStatus(String userId);

	/**
	 * 批量禁用、启用用户状态.
	 * 
	 * @param list
	 * @return
	 */
	int batchUpdateUserInfoWithList(@Param("list") List<StatusList> list);

	/**
	 * 带条件分页查询.
	 * 
	 * @param record
	 * @return
	 */
	List<Pusers> selectPusersCountList(PusersSelectVo puserVo);

	PuserInfoVo selectByPrimaryKey(String userId);

	int updateByPrimaryKeySelective(Pusers record);

	int updateByPrimaryKey(Pusers record);

	/**
	 * 获取个人用户总数.
	 * 
	 * @return
	 */
	Integer getPusersCount(String institutionId);

	/**
	 * 角色添加用户时，未添加角色用户关系的用户列表.
	 * 
	 * @param userName
	 * @return
	 */
	List<UserRoleVo> selectNoAddUserInfoList(UserQueryVo userQueryVo);

	/**
	 * 获取个人用户总数.
	 * 
	 * @return
	 */
	Integer getNoAddUserInfoListCount(UserQueryVo userQueryVo);

	/**
	 * 通过用户id查询用户当前密码.
	 * 
	 * @param userId
	 * @return
	 */
	PUserPwVo getPasswordByUserId(String userId);

	/**
	 * 用户登录.
	 * 
	 * @param userName
	 * @param password
	 * @return
	 */
	Pusers login(String userName);

	/**
	 * 批量删除用户信息.
	 * 
	 * @param userIdList
	 * @return
	 */
	int deletePusersByIdBatch(@Param("list") List<String> list);

	/**
	 * 通过机构id查询机构管理员所属用户信息列表.
	 * 
	 * @param institutionsId
	 * @return
	 */
	List<ParentUserVo> getUserListByInstitutionsId(String institutionsId);
	
	/**
	 * 判断userId是否存在
	 * @param userId
	 * @return
	 */
	String getUserId(String userId);
	
	
	   /**
     * 通过用户id和机构id查询机构所属用户是否存在.
     * @param orderUserVo
     * @return
     */
    Integer getOrderUserInfoCount(OrderUserVo orderUserVo);
	/**
	 * 根据userId查询用户信息
	 * @param userId
	 * @return
	 */
	Pusers selectPusersInfoList(String userId);
	
	/**
	 * 获取已启用用户总数.
	 * 
	 * @return
	 */
	Integer getPuserStatusCount(String institutionId);
	
	/**
	 * 查询技术专员
	 * @return
	 */
	List<ParentUserVo> selectUserBy();
	/**
	 * 根据姓名模糊查询技术专员
	 * @param userName
	 * @return
	 */
	List<ParentUserVo> selectUserListByUserName(String userName);
	
	/**
	 * 查询所有用户
	 * @return
	 */
	Integer selectUserCount();
	
	/**
	 * 查询所有子级用户
	 * @param institutionId
	 * @return
	 */
	Integer selectCharUserCount(@Param("list") List<String> list);

	Pusers getDhUsersByName(String username);
}